/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Mercado.controller;

import Mercado.model.Cadastro;
import Mercado.model.Cliente;
import Mercado.model.Estoque;
import Mercado.model.Produto;
import Mercado.view.Venda_Panel;
import java.awt.Color;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JTable;
import javax.swing.JTextField;

/**
 *
 * @author rafael
 */
public class Venda_controller {
    private Cadastro cad;
    private Estoque e;
    private Cliente cliente;
    private Produto produto;

    public Venda_controller(Cadastro cad, Estoque e) {
        this.e = e;
        this.cad = cad;
    }

    public Cadastro getCad() {
        return cad;
    }

    public Estoque getE() {
        return e;
    }

    public void setCad(Cadastro cad) {
        this.cad = cad;
    }

    public void setE(Estoque e) {
        this.e = e;
    }
    
    public void checaCliente(JPanel aba){
        int cod;
            try{
                cod = Integer.parseInt(((JTextField)aba.getComponent(0)).getText());
                ((JTextField)aba.getComponent(1)).setText(cad.getCliente(cod).getNome());
            }
            catch(NumberFormatException er){
                System.err.println(((JTextField)aba.getComponent(0)).getText());
                ((JLabel)aba.getComponent(2)).setText("Insira um código númerico!");
                ((JTextField)aba.getComponent(1)). setText("");
                ((JLabel)aba.getComponent(2)).setForeground(Color.red);
                return;
            }catch(IndexOutOfBoundsException er){
                System.err.println("Cliente Inexistente!");
                ((JLabel)aba.getComponent(2)).setText("Cliente Inexistente!");
                ((JTextField)aba.getComponent(1)). setText("");
                ((JLabel)aba.getComponent(2)).setForeground(Color.red);
                return;
            }
    }

    public void iniciaVenda(JPanel aba) {
        int cod;
        try{
            cod = Integer.parseInt(((JTextField)aba.getComponent(0)).getText());
        }
        catch(NumberFormatException er){
            System.err.println(((JTextField)aba.getComponent(0)).getText());
            ((JLabel)aba.getComponent(2)).setText("Insira um código númerico!");
            ((JLabel)aba.getComponent(2)).setForeground(Color.red);
            return;
        }
        try{
            cliente = cad.getCliente(cod);
            ((JTextField)aba.getComponent(1)).setText(cliente.getNome());
            cliente.novaCompra();
        }catch(IndexOutOfBoundsException er){
            System.err.println("Cliente Inexistente!");
            ((JLabel)aba.getComponent(2)).setText("Cliente Inexistente!");
            ((JLabel)aba.getComponent(2)).setForeground(Color.red);
            System.out.println(cliente==null);
            return;
        }
        ((JButton)aba.getComponent(3)).    setEnabled(false);
        ((JButton)aba.getComponent(4)).   setEnabled(true);
        ((JButton)aba.getComponent(5)).   setEnabled(true);
        ((JLabel)aba.getComponent(2)).    setText("Compra Iniciada!");
        ((JLabel)aba.getComponent(2)).    setForeground(Color.green);
    }

    public void encerraVenda(JPanel aba) {
        ((JButton)aba.getComponent(5)).setEnabled(false);
        ((JButton)aba.getComponent(4)).setEnabled(false);
        ((JButton)aba.getComponent(3)).setEnabled(true);
        e = cliente.manipulaCompra("END", e, null, 0);
        ((JLabel)aba.getComponent(2)).    setText("Compra Finalizada!");
        ((JLabel)aba.getComponent(2)).    setForeground(Color.green);
    }

    public void cancelaVenda(JPanel aba) {
        ((JButton)aba.getComponent(5)).setEnabled(false);
        ((JButton)aba.getComponent(4)).setEnabled(true);
        e = cliente.manipulaCompra("CAN", e, null, 0);
        ((JLabel)aba.getComponent(2)).    setText("Compra Cancelada!");
        ((JLabel)aba.getComponent(2)).    setForeground(Color.red);
    }

    public void checaProduto(JPanel aba) {
        Produto p1 = e.getProduto(Integer.parseInt(((JTextField)aba.getComponent(0)).getText()));
        if (p1 != null) {
            ((JTextField)aba.getComponent(1)). setText(p1.getNome());
            ((JTextField)aba.getComponent(2)).setText("R$ " + String.valueOf(p1.getPreco()));
            ((JTextField)aba.getComponent(3)).  setText(String.valueOf(e.getQtdItens().get(e.getProdutos().indexOf(p1))));
            ((JTextField)aba.getComponent(5)).  setText("R$ " + String.valueOf(p1.getPreco() * Float.parseFloat(((JTextField)aba.getComponent(4)).getText())));
            ((JButton)aba.getComponent(6)).  setEnabled(true);
        }
    }

    public void calculaPreco(JPanel aba) {
        try{
            float qtd = Float.parseFloat(((JTextField)aba.getComponent(4)).getText());
            float preco = Float.parseFloat(((JTextField)aba.getComponent(2)).getText().substring(3));
            ((JTextField)aba.getComponent(5)).setText("R$ "+String.valueOf(qtd*preco));
        }
        catch(Exception ex){}
    }

    public void addCarrinho(JPanel aba) {
        produto = e.getProduto(Integer.parseInt(((JTextField)aba.getComponent(0)).getText()));
        e = cliente.manipulaCompra("ADD", e, produto, Float.parseFloat(((JTextField)aba.getComponent(4)).getText()));
        int i;
        for (i=0;i<6;i++)
            ((JTextField)aba.getComponent(i)).setText("");
        ((JTextField)aba.getComponent(4)).setText("1");
        ((JButton)aba.getComponent(6)).  setEnabled(false);
    }

    public void atualizaTabela(JPanel lis) {
        try{
            lis.remove(6);
        }catch(ArrayIndexOutOfBoundsException ex){}
        lis.add(geraTabela());
        lis.getComponent(6).setEnabled(((JTable)lis.getComponent(6)).getRowCount()!=0);
        lis.getComponent(6).setVisible(false);
        lis.getComponent(6).setVisible(true);
    }
    
    private JTable geraTabela() {
        JTable tabela = new JTable();
        try{
            List<Produto> pro = cliente.getCompra(-1).getItens();
            String[][] rowData;
            if(pro!=null){
                rowData = new String[pro.size()][5];
                for (Produto p: pro){
                    rowData[pro.indexOf(p)][0] = String.valueOf(p.getCodigo());
                    rowData[pro.indexOf(p)][1] = p.getNome();
                    rowData[pro.indexOf(p)][2] = "R$ "+String.valueOf(p.getPreco());
                    rowData[pro.indexOf(p)][3] = String.valueOf(cliente.getCompra(-1).getQtd(pro.indexOf(p)));
                    rowData[pro.indexOf(p)][4] = "R$ "+String.valueOf(cliente.getCompra(-1).getValor(pro.indexOf(p)));
                }
            }else
                rowData = new String[1][5];
            String[] columnNames = {"Código","Nome","Preço Unitário","Quantidade","Preço Total"};
            tabela = new JTable(rowData, columnNames);
            //tabela.setColumnModel(null);
            //tabela.setEditable(false);
        }catch(Exception ex){
            tabela = new JTable();
        }finally{
            tabela.setBounds(5, 25, 620, 330);
            tabela.add(new JScrollBar());
        }
        return tabela;
    }

    public void removeItem(JPanel lis) {
        try{
            int linha = ((JTable)lis.getComponent(6)).getSelectedRow();
            if(linha!=-1){
                e = cliente.manipulaCompra("REM", e, cliente.getCompra(-1).getItem(linha),cliente.getCompra(-1).getQtd(linha));
                atualizaTabela(lis);
            }
        }catch(ArrayIndexOutOfBoundsException ex){}
    }

    public void ligaAbas(boolean b, Venda_Panel aThis) {
        aThis.setEnabledAt(1, b);
        aThis.setEnabledAt(2, b);
    }
}
